/**
 * @description: 选择手机图片
 * @param {type} album	从相册选图
 * @param {type} camera	使用相机
 * @return {type}
 * @author: hch
 */
export function chooseImage() {
	return new Promise((resolve, reject) => {
		uni.chooseImage({
			count: 1,
			sizeType: ['original', 'compressed'],
			sourceType: ['album', 'camera'],
			success(res) {
				// // tempFilePath可以作为img标签的src属性显示图片
				const tempFilePaths = res.tempFilePaths[0];
				resolve(tempFilePaths);
			}
		});
	});
}
/**
 * @description: 在新页面中全屏预览图片。预览的过程中用户可以进行保存图片、发送给朋友等操作。
 * @param {type} current	前显示图片的http链接
 * @param {type} urls	需要预览的图片http链接列表
 * @return {type}
 * @author: hch
 */
export function chooseImg(current, urls) {
	uni.previewImage({
		current: current, // 当前显示图片的http链接
		urls: urls // 需要预览的图片http链接列表
	});
}
/**
 * @description: 绘制正方形（可以定义圆角），并且有图片地址的话填充图片
 * @param {CanvasContext} ctx canvas上下文
 * @param {number} x 圆角矩形选区的左上角 x坐标
 * @param {number} y 圆角矩形选区的左上角 y坐标
 * @param {number} w 圆角矩形选区的宽度
 * @param {number} h 圆角矩形选区的高度
 * @param {number} r 圆角的半径
 * @param {String} url 图片的url地址
 * @param {String} color 画笔颜色
 * @param {String} backgroundColor 背景色
 * @param {String} rotate 旋转角度
 * @param {String} lineWidth 线宽
 */
export function drawSquarePic(
	ctx,
	x,
	y,
	w,
	h,
	r,
	url,
	color = 'transparent',
	backgroundColor = 'transparent',
	rotate = 0,
	lineWidth = 0,
	system = null,
) {
	if (r * 2 >= w || r == '50%') {
		r = w / 2;
	}
	ctx.save();
	ctx.beginPath();
	let tempH = JSON.parse(JSON.stringify(h)) - 0;
	if (system) {
		h = system.h;
	}
	if (rotate !== 0) {
		// 1. 以图片中心点为旋转中心点
		const rx = x + (w * 1) / 2;
		const ry = lineWidth * 4 + y + (h * 1) / 2;
		ctx.translate(rx, ry);
		// 2. 旋转画布
		ctx.rotate((rotate * Math.PI) / 180);
		// 3. 旋转完画布后恢复设置旋转中心时所做的偏移
		ctx.translate(-rx, -ry);
	}
	// 绘制左上角圆弧
	ctx.arc(x + r, y + r, r, Math.PI, Math.PI * 1.5);
	// 绘制border-top
	// 画一条线 x终点、y终点
	ctx.lineTo(x + w - r, y);
	// 绘制右上角圆弧
	ctx.arc(x + w - r, y + r, r, Math.PI * 1.5, Math.PI * 2);
	// 绘制border-right
	ctx.lineTo(x + w, y + h - r);
	// 绘制右下角圆弧
	ctx.arc(x + w - r, y + h - r, r, 0, Math.PI * 0.5);
	// 绘制左下角圆弧
	ctx.arc(x + r, y + h - r, r, Math.PI * 0.5, Math.PI);
	// 绘制border-left
	ctx.lineTo(x, y + r);
	// 修改绘制轮廓的颜色
	ctx.strokeStyle = color;
	// 线宽
	ctx.setLineWidth(lineWidth * 2);
	ctx.stroke();
	// 填充颜色(需要可以自行修改)
	ctx.setFillStyle(backgroundColor);
	ctx.fill();
	// 剪切，剪切之后的绘画绘制剪切区域内进行，需要save与restore 这个很重要 不然没办法保存
	ctx.clip();
	// 绘制图片
	return new Promise((resolve, reject) => {
		if (url) {
			uni.getImageInfo({
				src: url,
				success(res) {
					if (system) {
						ctx.drawImage(res.path, x, y, w, tempH);
					} else {
						ctx.drawImage(res.path, x, y, w, h);
					}
					ctx.restore(); //恢复之前被切割的canvas，否则切割之外的就没办法用
					ctx.draw(true);
					resolve();
				},
				fail(res) {
					console.log('fail -> res', res, url);
					uni.showToast({
						title: '图片下载异常',
						duration: 2000,
						icon: 'none'
					});
				}
			});
		} else {
			ctx.restore(); //恢复之前被切割的canvas，否则切割之外的就没办法用
			ctx.draw(true);
			resolve();
		}
	});
}

/**
 * @description: 获取设备信息
 * @param {type}
 * @return {type}
 * @author: hch
 */
export function getSystem() {
	let system = uni.getSystemInfoSync();
	let scale = system.windowWidth / 375; //按照苹果留 375*667比例 其他型号手机等比例缩放 显示
	return {
		w: system.windowWidth,
		h: system.windowHeight,
		scale: scale
	};
}

/**
 * @description: 绘制文本时文本的总体高度
 * @param {Object} ctx canvas上下文
 * @param {String} text 需要输入的文本
 * @param {Number} x X轴起始位置
 * @param {Number} y Y轴起始位置
 * @param {Number} maxWidth 单行最大宽度
 * @param {Number} fontSize 字体大小
 * @param {String} color 字体颜色
 * @param {String} textAlign 字体对齐方式
 */
export function drawTextReturnH(
	ctx,
	text,
	x,
	y,
	maxWidth,
	height,
	fontSize = '15',
	color = '#000',
	textAlign = 'left',
	fontWeight = 'normal',
	rotate = 0
) {
	ctx.save();
	ctx.beginPath();
	ctx.setTextBaseline('top');
	let arrText = text.split('');
	let line = '';
	if (rotate != 0) {
		const rx = x + maxWidth / 2;
		const ry = y + height / 2;
		ctx.translate(rx, ry);
		// 2. 旋转画布
		ctx.rotate((rotate * Math.PI) / 180);
		// 3. 旋转完画布后恢复设置旋转中心时所做的偏移
		ctx.translate(-rx, -ry);
	}
	if (textAlign) {
		ctx.setTextAlign(textAlign); //设置文本的水平对齐方式  ctx.setTextAlign这个可以兼容百度小程序 ，注意：ctx.textAlign百度小程序有问题
		switch (textAlign) {
			case 'center':
				x = x + maxWidth / 2;
				break;

			case 'right':
				x = x + maxWidth;
				break;

			default: // 左对齐
				x = x;
				break;
		}
	}
	let lineHeight = '';
	for (let n = 0; n < arrText.length; n++) {
		let testLine = line + arrText[n];
		ctx.font = fontWeight + ' ' + fontSize + 'px sans-serif'; //设置字体大小，注意：百度小程序 用ctx.setFontSize设置字体大小后，计算字体宽度会无效
		ctx.setFillStyle(color); //设置字体颜色
		let metrics = ctx.measureText(testLine); //measureText() 方法返回包含一个对象，该对象包含以像素计的指定字体宽度。
		let testWidth = metrics.width;
		if (lineHeight === '') {
			lineHeight = testWidth;
		}
		if (testWidth > maxWidth && n > 0) {
			ctx.fillText(line, x, y);
			line = arrText[n];
			y += lineHeight;
		} else {
			line = testLine;
		}
	}
	ctx.fillText(line, x, y);
	ctx.draw(
		true
	); //本次绘制是否接着上一次绘制。即 reserve 参数为 false，则在本次调用绘制之前 native 层会先清空画布再继续绘制；若 reserve 参数为 true，则保留当前画布上的内容，本次调用 drawCanvas 绘制的内容覆盖在上面，默认 false。
	ctx.restore();
	return y;
}